export class Observer {
    constructor(value) {
        // 初始化
        this.value = value
        // 判断是否为数组或者是对象
        if (Array.isArray(value)) {

        }
        else {
            // 对象的逻辑
            this.walk(value)
        }
    }
    walk(obj) {
        const keys = Object.keys(obj)
        for (let i = 0; i <= keys.length; i++) {
            defineReactive(obj,keys[i])
        }
    }
}
// 循环 让对象的每一个属性都变为可观测的
function defineReactive(obj, key, val) {
    if (arguments.length === 2) {
        val = obj[key] //对象的某个值
    }
    if (typeof val === 'object') {
        // 递归
        new Observer(val)

    }
    Object.defineProperty(obj,key,{
        enumerable:true,
        configurable:true,
        get(){
            console.log(`${key}被读取了`);
            return val
        },
        set(newval){
            console.log(`${key}被修改了变化后的值${newval}`);
            val=newval
        }
    })

}
